/*
 * класс который обслуживает события кнопок меню и тулбара
 */

package clientApp.textlogic;

import java.io.*;

import javax.swing.*;
import javax.swing.undo.CannotRedoException;
import javax.swing.undo.CannotUndoException;
import javax.swing.undo.UndoManager;

public class Actions {
	
	private File fileName;
	private BufferedWriter writer;
	private BufferedReader reader;
	private String buffer = "";
	private FileFilter filter;
	
	//создание нового окна (путем удаления текста и старого и обновления title)
	public void setNewWindow(JFrame frame, JTextArea textArea){
		textArea.setText("");
		frame.setTitle("Stim - Нове повiдомлення");
	}
	
	//закрытие окна сообщения
	public void closeWindow(JFrame frame, JTextArea textArea, AbstractButton save, AbstractButton saveAs, AbstractButton saveP){
		frame.setTitle("Stim");
		save.setEnabled(false);
		saveAs.setEnabled(false);
		saveP.setEnabled(false);
		textArea.setText("");
		textArea.setEnabled(false);
	}
	
	//обовление кнопок undo/redo
	public void updateUndoRedoButtons(UndoManager undoManager, 
										AbstractButton undoButton, AbstractButton redoButton){
		
		undoButton.setEnabled(undoManager.canUndo());
		redoButton.setEnabled(undoManager.canRedo());
	}
	
	//логика события undo
	public void setUndo(UndoManager undoManager){
		try{
			undoManager.undo();
		}
		catch(CannotUndoException exp){
			exp.printStackTrace();
		}
	}
	
	//логика события redo
	public void setRedo(UndoManager undoManager){
		try{
			undoManager.redo();
		}
		catch(CannotRedoException exp){
			exp.printStackTrace();
		}
	}
	
	//логика открытия файла
	public String openDialog(){
		JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        filter = new FileFilter("txt", "*.txt");
        fileChooser.addChoosableFileFilter(filter);
		        int result = fileChooser.showOpenDialog(fileChooser);
		        if (result == JFileChooser.CANCEL_OPTION){
		            return null;
		        }
		        fileName = fileChooser.getSelectedFile();
		        if (fileName == null || fileName.getName().equals("") && fileName.canRead() == false){
		            JOptionPane.showMessageDialog(fileChooser, "Неправильне iм'я файлу", "Помилка вiдкриття файлу", JOptionPane.ERROR_MESSAGE);
		        }
		        else {
		            // открыть файл
		            try {
		            	String text;
		            	reader = new BufferedReader(new FileReader(fileName));
		                while ((text = reader.readLine()) != null){
		                	buffer += text+"\n";
		                }
		            }
		            catch (IOException exp){
		                JOptionPane.showMessageDialog(fileChooser, "Неможливо вiдкрити файл", "Помилка вiдкриття файлу", JOptionPane.ERROR_MESSAGE);
		            }
		            finally {
		            	if (reader != null){
		            		try {
		            			reader.close();
		            		}
		            		catch (IOException exp){
		            			exp.printStackTrace();
		            		}
		            	}
		            }
		        }

		        return buffer;
	}
	
	//логика сохранения файла "Save As"
	public void writeFileAs (String text){
		JFileChooser fileChooser = new JFileChooser();
        fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
        filter = new FileFilter("txt", "*.txt");
        fileChooser.addChoosableFileFilter(filter);
		int result = fileChooser.showSaveDialog(fileChooser);
        if (result == JFileChooser.CANCEL_OPTION){
            return;
        }
        fileName = fileChooser.getSelectedFile();
        if (fileName == null || fileName.getName().equals("")){
            JOptionPane.showMessageDialog(fileChooser, "Неправильне iм'я файлу", "Помилка вiдкриття файлу", JOptionPane.ERROR_MESSAGE);
        }
        else {
            // открыть файл
            try {
                String name = fileName.getName();
                FileWriter fileWriter = new FileWriter(fileName);
                writer = new BufferedWriter(fileWriter);
                fileWriter.write(text);
            }
            catch (IOException exp){
                JOptionPane.showMessageDialog(fileChooser, "Неможливо вiдкрити файл", "Помилка вiдкриття файлу", JOptionPane.ERROR_MESSAGE);
            }
            finally {
            	if (writer != null){
            		try {
            			writer.close();
            		}
            		catch (IOException exp){
            			exp.printStackTrace();
            		}
            	}
            }
        }
	}
	
	//логика сохранения файла "Save"
	public void writeFile(String text){
		try {
			FileWriter fileWriter = new FileWriter(fileName);
			writer = new BufferedWriter(fileWriter);
			fileWriter.write(text);
		}
		catch (IOException exp){
			exp.printStackTrace();
		}
		 finally {
         	if (writer != null){
         		try {
         			writer.close();
         		}
         		catch (IOException exp){
         			exp.printStackTrace();
         		}
         	}
         }
	}
	
	//получит имя файла
	public String getFileName(){
		if (fileName != null){
			return fileName.getName();
		}
		else return "";
	}
	
	
}
